/**
 * WQuake 自定义测站模板 —— 入口文件
 * ==================================================================
 * 本模板演示如何用极少的代码，把「自己的测站数据」显示到 WQuake：
 *   1) 地图上绘制圆点（颜色随数值自动着色）
 *   2) 侧边「测站栏」列出最大值台站
 *
 * 你只需要提供每个台站的：名称 + 经纬度 + 数值 + 刻度类型。
 *
 * 核心接口（需要 manifest.permissions 含 "stations"）：
 *   wq.stations.setBatch(list)   -> 写入/替换本插件的全部测站（一次性提交整批）
 *   wq.stations.clear()          -> 清空本插件的所有测站
 *
 * list 中每一项的字段：
 *   name  {string}  台站名称（必填，显示在测站栏与地图）
 *   lat   {number}  纬度（必填）
 *   lng   {number}  经度（必填）
 *   value {number}  数值（必填）
 *   scale {string}  刻度类型（决定地图圆点配色）：
 *                     'shindo'    -> 震度（如 4.2 显示为 4，5.1 显示为 5-）
 *                     'intensity' -> 烈度（整数，如 6 显示为 6）
 *                     'pga'       -> 峰值加速度(gal)，宿主按 CWA 阈值自动换算成烈度着色
 *   pga   {number}  可选。原始 PGA(gal)，显示到「插件测站」面板 PGA 方框（取最大值，不换算烈度）
 *   pgv   {number}  可选。原始 PGV(kine)，显示到「插件测站」面板 PGV 方框（取最大值，不换算烈度）
 *   id    {string}  可选。稳定标识；同一 id 再次 setBatch 会平滑更新位置/数值
 *
 * 另外可读取当前界面正在显示的 PGA/PGV 峰值：
 *   wq.stations.getMetrics() -> Promise<{ nied:{pga,pgv}, trem:{pga,pgv}, palert:{pga} }>
 *
 * 说明：
 *   - setBatch 是「整批替换」语义：每次提交本插件当前应显示的完整列表。
 *   - 不同插件之间互不影响（宿主按插件 id 做了命名空间隔离）。
 *   - 插件被禁用/卸载时，宿主会自动清空本插件的测站；下方仍手动 clear 以作示范。
 * ==================================================================
 */
function onLoad(wq) {
  wq.log.info('测站模板插件已加载', wq.app.version)

  // 演示用的几个台站（真实场景请替换为你从接口拉取的数据）
  const BASE_STATIONS = [
    { id: 'demo-bj', name: '北京', lat: 39.9042, lng: 116.4074 },
    { id: 'demo-sh', name: '上海', lat: 31.2304, lng: 121.4737 },
    { id: 'demo-cd', name: '成都', lat: 30.5728, lng: 104.0668 },
    { id: 'demo-gz', name: '广州', lat: 23.1291, lng: 113.2644 }
  ]

  // 根据设置选择刻度类型；不同刻度决定地图圆点配色与显示文本
  function currentScale() {
    const s = wq.settings.getAll() || {}
    const v = String(s.scale || 'shindo')
    return (v === 'intensity' || v === 'pga') ? v : 'shindo'
  }

  // 生成一批测站数据并提交。value 用随机值模拟实时变化。
  function pushOnce() {
    const scale = currentScale()
    // 不同刻度的数值范围不同：震度 ~0-7，烈度 ~1-8，PGA ~0-300 gal
    const maxVal = scale === 'pga' ? 300 : (scale === 'intensity' ? 8 : 7)
    const list = BASE_STATIONS.map(function (st) {
      return {
        id: st.id,
        name: st.name,
        lat: st.lat,
        lng: st.lng,
        value: Math.round(Math.random() * maxVal * 10) / 10,
        scale: scale,
        // 额外携带原始 PGA/PGV：直接以数值显示到「插件测站」面板方框（取最大值，不换算烈度）
        pga: Math.round(Math.random() * 300 * 10) / 10,
        pgv: Math.round(Math.random() * 150 * 100) / 100
      }
    })
    wq.stations.setBatch(list)
  }

  // 立即推送一次
  pushOnce()
  wq.ui.toast('测站模板：已在地图绘制 ' + BASE_STATIONS.length + ' 个演示台站', 'success')

  // 演示读取「可视 PGA/PGV」（界面震度栏正在显示的峰值；未开启对应开关时为 null）
  if (wq.stations.getMetrics) {
    wq.stations.getMetrics().then(function (m) {
      wq.log.info('当前可视 PGA/PGV', m)
    }).catch(function () {})
  }

  // 是否开启定时模拟刷新（演示实时更新效果）
  let timer = null
  function applyLiveTimer() {
    const s = wq.settings.getAll() || {}
    const live = s.demoLive !== false
    if (live && !timer) {
      timer = setInterval(pushOnce, 3000)
    } else if (!live && timer) {
      clearInterval(timer)
      timer = null
    }
  }
  applyLiveTimer()

  // 设置变更时：刷新一次数据 + 重新评估定时器
  const offSettings = wq.settings.onChange(function () {
    pushOnce()
    applyLiveTimer()
  })

  // 插件禁用/卸载时清理：停定时器 + 清空本插件测站
  wq.onUnload(function () {
    if (timer) { clearInterval(timer); timer = null }
    offSettings()
    try { wq.stations.clear() } catch (e) {}
    wq.log.info('测站模板插件已卸载')
  })
}

// 兼容两种写法：ESM 风格 export 或直接定义全局 onLoad
if (typeof window !== 'undefined') window.onLoad = onLoad
